package com.example.lotterysystem.service.impl;

import com.example.lotterysystem.common.errorcode.ServiceErrorCodeConstants;
import com.example.lotterysystem.common.exception.ServiceException;
import com.example.lotterysystem.common.utils.*;
import com.example.lotterysystem.dao.dataobject.UserDO;
import com.example.lotterysystem.dao.mapper.UserMapper;
import com.example.lotterysystem.service.UserService;
import com.example.lotterysystem.service.VerificationCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * @auther falls_vc
 * description:
 * @date 2025/5/14  20:48
 */
@Service
public class VerificationCodeServiceImpl implements VerificationCodeService {
    // Redis 区分业务 加前缀  这里添加 VERIFICATION_CODE_(前缀)+phoneNumber 为key

//    private static final String VERIFICATION_CODE_TMAPLATE_CODE="验证码模版代码"; // "验证码模版代码"
    private static final Long VERIFICATION_CODE_TIMEOUT=60L;                     // "验证码保存时间"
    private static final String VERIFICATION_CODE_PREFIX="VERIFICATION_CODE_";   // "验证码前缀"

    private static final String VERIFICATION_CODE_SUBJECT = "LOTTERY_SYSTEM_VERIFICATION_CODE 抽奖系统验证码";   //  "主题"




    @Autowired
    private UserMapper userMapper;

    @Value("${spring.mail.verificationcode.length}")
    private int VERIFICATION_CODE_LENGTH;

    @Autowired
    private RedisUtil redisUtil;
    // 通过邮箱发送验证码
    @Autowired
    private MailUtil mailUtil;
//    @Autowired
//    private SMSUtil smsUtil;

    @Override
    public void sendLoginVerificationCode(String mail) {
        // 邮箱校验
        if (!RegexUtil.checkMail(mail)) {
            throw new ServiceException(ServiceErrorCodeConstants.MAIL_ERROR);
        }
        // 邮箱是否存在账号
        UserDO userDO = userMapper.selectByMail(mail);
        if(null == userDO) {
            throw new ServiceException(ServiceErrorCodeConstants.USER_INFO_NOT_EXIST);
        }

        // 获得验证码
        String code= CaptchaUtil.getCaptcha(VERIFICATION_CODE_LENGTH);
        // 发送验证码
//

        mailUtil.sendMail(mail,VERIFICATION_CODE_SUBJECT,code);

//        这里没有 短信服务
//        Map<String,String> map=new HashMap<>();
//        map.put("code",code);
//        smsUtil.sendMessage(VERIFICATION_CODE_TMAPLATE_CODE,phoneNumber, JacksonUtil.writeValueAsString(map));


        // 缓存验证码
        redisUtil.set(VERIFICATION_CODE_PREFIX+mail,code,VERIFICATION_CODE_TIMEOUT);
    }

    @Override
    public String getVerificationCode(String mail) {
        // 邮箱校验
        if (!RegexUtil.checkMail(mail)) {
            throw new ServiceException(ServiceErrorCodeConstants.MAIL_ERROR);
        }

        return redisUtil.get(VERIFICATION_CODE_PREFIX+mail);
    }
//    }
//
//    @Override
//    public void sendVerificationCode(String phoneNumber) {
//        // 手机号校验
//        if (!RegexUtil.checkMobile(phoneNumber)) {
//            throw new ServiceException(ServiceErrorCodeConstants.PHONE_NUMBER_ERROR);
//        }
//        // 获得验证码
//        String code= CaptchaUtil.getCaptcha(4);
//        // 发送验证码
//        Map<String,String> map=new HashMap<>();
//        map.put("code",code);
//
////        这里没有 短信服务
////        smsUtil.sendMessage(VERIFICATION_CODE_TMAPLATE_CODE,phoneNumber, JacksonUtil.writeValueAsString(map));
//
//
//        // 缓存验证码
//        redisUtil.set(VERIFICATION_CODE_PREFIX+phoneNumber,code,VERIFICATION_CODE_TIMEOUT);
//    }
//
//    @Override
//    public String getVerificationCode(String phoneNumber) {
//        // 手机号校验
//        if (!RegexUtil.checkMobile(phoneNumber)) {
//            throw new ServiceException(ServiceErrorCodeConstants.PHONE_NUMBER_ERROR);
//        }
//
//        return redisUtil.get(phoneNumber);
//    }
}
